home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Belgian Amiga Club - ADF Collection
/
BS1 part 34.zip
/
BS1 part 34
/
GFA basic training.adf
/
Requester
/
MINIMAL-TOOL.LST
< prev
next >
Wrap
File List
|
1989-06-01
|
18KB
|
633 lines
@min_tool
PROCEDURE min_tool
LOCAL okx1&,okx2&,oky1&,oky2&,st_sp&,le_ze&,ma_sp&,min_x&,max_x&,min_y&,max_y&
LOCAL wÄhlbar!,x$,revers$,n_gruppen%,wert%,bremse!,gefunden!,flag!,ende!,i&
LOCAL dif&,tx&,ty&,i|,j|,j1|,k|,l|,t|,z|,boxen,text$,form$,hintergrund$,a$
@zÄhl_box(100,50,"Wieviel Gruppen hat das Formular",0,0,0,20,1,n_gruppen%)
'
DIM text$(10),form$(SUCC(n_gruppen%),10),boxen(SUCC(n_gruppen%),10,4),hintergrund$(n_gruppen%,10),wÄhlbar!(n_gruppen%,10)
FOR i|=1 TO 10
text$(i|)="Text "+STR$(i|)
NEXT i|
'
FOR i|=1 TO n_gruppen%
REPEAT
@zÄhl_box(100,50,"Wieviel Einträge hat Gruppe "+STR$(i|),0,0,0,10,1,wert%)
UNTIL wert%>0
@edit_box(100,1,"Geben Sie nun die Texte der Gruppe "+STR$(i|)+" ein!",0,0,wert%,text$())
FOR k|=1 TO wert%
form$(i|,k|)=edit$(k|)
NEXT k|
ERASE edit$()
NEXT i|
ERASE text$()
'
CLS
@gitter
@boxen
@positionieren
@rahmen
@wÄhlbare
@speichern
RETURN
PROCEDURE gitter
COLOR 3
FOR i&=10 TO 240 STEP 10
LINE 0,i&,640,i&
NEXT i&
FOR i&=10 TO 640 STEP 10
LINE i&,0,i&,240
NEXT i&
okx1&=550
okx2&=610
oky1&=210
oky2&=220
GRAPHMODE 1
COLOR 1
TEXT okx1&+3,oky1&+8,"WEITER!"
BOX okx1&,oky1&,okx2&,oky2&
RETURN
PROCEDURE boxen
FOR i|=1 TO n_gruppen%
j|=1
REPEAT
z|=1
t|=0
l|=0
WHILE INSTR(form$(i|,j|),"|",t|)
INC z|
l|=MAX(l|,INSTR(form$(i|,j|),"|",t|)-t|)
t|=SUCC(INSTR(form$(i|,j|),"|",t|))
WEND
IF l|
boxen(i|,j|,3)=l|*8+10
ELSE
boxen(i|,j|,3)=LEN(form$(i|,j|))*8+10
ENDIF
'
boxen(i|,j|,1)=st_sp&+2
boxen(i|,j|,2)=le_ze&+2
boxen(i|,j|,3)=boxen(i|,j|,3)+boxen(i|,j|,1)
boxen(i|,j|,4)=10*z|+boxen(i|,j|,2)
le_ze&=boxen(i|,j|,4)
ma_sp&=MAX(ma_sp&,boxen(i|,j|,3))
IF le_ze&>200
ADD st_sp&,ma_sp&
ma_sp&=0
le_ze&=0
ENDIF
'
@setzen
INC j|
UNTIL form$(i|,j|)=""
NEXT i|
RETURN
PROCEDURE position
bremse!=TRUE
gefunden!=FALSE
IF flag!
flag!=FALSE
@finden
IF gefunden!
PUT boxen(i|,j|,1),boxen(i|,j|,2),hintergrund$(i|,j|)
DEFMOUSE 5
ELSE
flag!=TRUE
ENDIF
ELSE
flag!=TRUE
dif&=boxen(i|,j|,3)-boxen(i|,j|,1)
IF MOUSEX<boxen(i|,j|,1)
SUB boxen(i|,j|,1),boxen(i|,j|,1)-MOUSEX
boxen(i|,j|,3)=boxen(i|,j|,1)+dif&
ADD boxen(i|,j|,1),2
ADD boxen(i|,j|,3),2
ELSE
ADD boxen(i|,j|,1),SUCC(MOUSEX-boxen(i|,j|,1))
boxen(i|,j|,3)=boxen(i|,j|,1)+dif&
ENDIF
dif&=boxen(i|,j|,4)-boxen(i|,j|,2)
IF MOUSEY<boxen(i|,j|,2)
SUB boxen(i|,j|,2),boxen(i|,j|,2)-MOUSEY
boxen(i|,j|,4)=boxen(i|,j|,2)+dif&
ELSE
ADD boxen(i|,j|,2),MOUSEY-boxen(i|,j|,2)
boxen(i|,j|,4)=boxen(i|,j|,2)+dif&
ENDIF
@setzen
DEFMOUSE 0
ENDIF
RETURN
PROCEDURE setzen
GRAPHMODE 1
IF INSTR(form$(i|,j|),"|")
GET boxen(i|,j|,1),boxen(i|,j|,2),boxen(i|,j|,3),boxen(i|,j|,4),hintergrund$(i|,j|)
z|=0
t|=1
WHILE INSTR(form$(i|,j|),"|",t|)
INC z|
x$=MID$(form$(i|,j|),t|,INSTR(form$(i|,j|),"|",t|)-t|)
t|=SUCC(INSTR(form$(i|,j|),"|",t|))
tx&=(boxen(i|,j|,1)+((boxen(i|,j|,3)-boxen(i|,j|,1))/2))-(LEN(x$)*4)
ty&=boxen(i|,j|,2)-2+z|*10
TEXT tx&,ty&,x$
WEND
x$=MID$(form$(i|,j|),t|,LEN(form$(i|,j|))-PRED(t|))
tx&=(boxen(i|,j|,1)+((boxen(i|,j|,3)-boxen(i|,j|,1))/2))-(LEN(x$)*4)
ty&=boxen(i|,j|,2)-2+SUCC(z|)*10
TEXT tx&,ty&,x$
BOX boxen(i|,j|,1),boxen(i|,j|,2),boxen(i|,j|,3),boxen(i|,j|,4)
ELSE
GET boxen(i|,j|,1),boxen(i|,j|,2),boxen(i|,j|,3),boxen(i|,j|,4),hintergrund$(i|,j|)
tx&=(boxen(i|,j|,1)+((boxen(i|,j|,3)-boxen(i|,j|,1))/2))-(LEN(form$(i|,j|))*4)
ty&=(boxen(i|,j|,2)+(boxen(i|,j|,4)-boxen(i|,j|,2))/2)+3
TEXT tx&,ty&,form$(i|,j|)
BOX boxen(i|,j|,1),boxen(i|,j|,2),boxen(i|,j|,3),boxen(i|,j|,4)
ENDIF
RETURN
PROCEDURE positionieren
flag!=TRUE
ende!=FALSE
bremse!=FALSE
DEFMOUSE 0
'
REPEAT
DO
EXIT IF MOUSEK=1 AND bremse!=FALSE
IF bremse!
bremse!=MOUSEK
ENDIF
LOOP
@position
UNTIL ende!=TRUE
RETURN
PROCEDURE finden
gefunden!=FALSE
IF MOUSEX>okx1& AND MOUSEX<okx2& AND MOUSEY>oky1& AND MOUSEY<oky2&
ende!=TRUE
ELSE
i|=0
REPEAT
INC i|
j|=0
REPEAT
INC j|
IF MOUSEX>boxen(i|,j|,1) AND MOUSEY>boxen(i|,j|,2) AND MOUSEX<boxen(i|,j|,3) AND MOUSEY<boxen(i|,j|,4)
j1|=j|
gefunden!=TRUE
ENDIF
UNTIL form$(i|,j|)=""
UNTIL i|>n_gruppen% OR gefunden!=TRUE
j|=j1|
ENDIF
RETURN
PROCEDURE rahmen
min_x&=640
max_x&=0
min_y&=640
max_y&=0
FOR i|=1 TO n_gruppen%
j|=1
REPEAT
min_x&=MIN(min_x&,boxen(i|,j|,1))
max_x&=MAX(max_x&,boxen(i|,j|,3))
min_y&=MIN(min_y&,boxen(i|,j|,2))
max_y&=MAX(max_y&,boxen(i|,j|,4))
INC j|
UNTIL form$(i|,j|)=""
NEXT i|
SUB min_x&,5
ADD max_x&,5
SUB min_y&,5
ADD max_y&,5
BOX min_x&,min_y&,max_x&,max_y&
RETURN
PROCEDURE wÄhlbare
GRAPHMODE 0
bremse!=TRUE
ende!=FALSE
'
REPEAT
DO
EXIT IF MOUSEK=1 AND NOT bremse!
IF bremse!
bremse!=MOUSEK
ENDIF
LOOP
bremse!=TRUE
@finden
IF gefunden!
IF wÄhlbar!(i|,j|)
wÄhlbar!(i|,j|)=FALSE
ELSE
wÄhlbar!(i|,j|)=TRUE
ENDIF
GET boxen(i|,j|,1),boxen(i|,j|,2),boxen(i|,j|,3),boxen(i|,j|,4),revers$
PUT boxen(i|,j|,1),boxen(i|,j|,2),revers$,30
ENDIF
UNTIL ende!=TRUE
'
RETURN
PROCEDURE speichern
FILESELECT "DATA-ZEILEN ABSPEICHERN!","SPEICHERN","RAM:",a$
OPEN "O",#1,a$
'
PRINT #1,"DATA ";max_x&-min_x&;",";max_y&-min_y&;",";n_gruppen%
FOR i|=1 TO n_gruppen%
j|=1
REPEAT
IF wÄhlbar!(i|,j|)
PRINT #1,"DATA "+form$(i|,j|)+",1,";
ELSE
PRINT #1,"DATA "+form$(i|,j|)+",0,";
ENDIF
PRINT #1,boxen(i|,j|,1)-min_x&;",";
PRINT #1,boxen(i|,j|,2)-min_y&;",";
PRINT #1,boxen(i|,j|,3)-min_x&;",";
PRINT #1,boxen(i|,j|,4)-min_y&
INC j|
UNTIL form$(i|,j|)=""
PRINT #1,"DATA -------------"
NEXT i|
CLOSEW #1
RETURN
' ----------------
PROCEDURE edit_box(x%,y|,u$,g_x%,g_y|,n|,VAR text$())
LOCAL ma|,t_breite%,u_breite%,f_breite%,b_breite%,b_hÖhe%,hintergrund$
LOCAL i|,j|,e_x%,e_y|,ex%,xl1%,xl2%,yl1|,yl2|,xr1%,xr2%,yr1|,yr2|,char|
LOCAL zeichen&,zeile|,spalte|,taste$,taste|,ende!,cursor$,rechts|,abbruch!
DIM edit$(n|),edit|(n|,100),zeiger_c|(n|),zeiger_z|(SUCC(n|))
abbruch!=FALSE
ende!=FALSE
'
ma|=LEN(text$(1))
FOR i|=2 TO n|
ma|=MAX(ma|,LEN(text$(i|)))
NEXT i|
MUL ma|,8
'
t_breite%=10+ma|+16+15*8+10
u_breite%=LEN(u$)*8
f_breite%=2*144+8+30
b_breite%=MAX(t_breite%,u_breite%+10,f_breite%+30,g_x%+10)
b_hÖhe%=(12+10)+g_y|+(n|*12)+(12+20)
'
GET x%,y|,x%+b_breite%+6,y|+b_hÖhe%+4,hintergrund$
COLOR 0
PBOX x%,y|,x%+b_breite%+6,y|+b_hÖhe%+4
COLOR 1
'
BOX x%,y|,x%+b_breite%+6,y|+b_hÖhe%+4
BOX x%+3,y|+2,x%+b_breite%+3,y|+b_hÖhe%+2
ADD x%,3
ADD y|,2
'
BOX x%+b_breite%/2-(LEN(u$)*8)/2-2,y|+5,x%+b_breite%/2+(LEN(u$)*8)/2+2,y|+17
TEXT x%+b_breite%/2-(LEN(u$)*8)/2,y|+14,u$
'
IF g_x%>0
PUT x%+b_breite%/2-g_x%/2,y|+22,grafik$
ENDIF
'
e_y|=y|+22+g_y|+13
e_x%=x%+10+ma|+15
FOR i|=0 TO n|-1
TEXT x%+10,e_y|+i|*12,text$(i|+1)+":"
NEXT i|
'
ADD e_y|,2
FOR i|=0 TO n|-1
ex%=e_x%
REPEAT
INC zeichen&
TEXT ex%,e_y|+i|*12,"_"
ADD ex%,9
UNTIL ex%>x%+b_breite%-18
NEXT i|
DIV zeichen&,n|
SUB e_y|,2
'
xl1%=x%+10
xl2%=x%+154
yl1|=y|+b_hÖhe%-22
yl2|=y|+b_hÖhe%-10
xr1%=x%+b_breite%-164
xr2%=x%+b_breite%-10
yr1|=y|+b_hÖhe%-22
yr2|=y|+b_hÖhe%-10
'
BOX xl1%,yl1|,xl2%,yl2|
BOX xr1%,yr1|,xr2%,yr2|
TEXT xl1%+4,yl2|-3,"Eingabe abbrechen"
TEXT xr1%+4,yl2|-3,"Eingabe bestätigen"
'
COLOR 3
PBOX e_x%,e_y|-7,e_x%+7,e_y|+1
GET e_x%,e_y|-7,e_x%+7,e_y|+1,cursor$
COLOR 1
zeile|=1
spalte|=1
e_box
PUT x%-3,y|-2,hintergrund$
'
IF NOT abbruch!
FOR i|=1 TO n|
IF zeiger_z|(i|)
FOR j|=0 TO PRED(zeiger_z|(i|))
edit$(i|)=edit$(i|)+CHR$(edit|(i|,j|))
NEXT j|
ENDIF
NEXT i|
ENDIF
'
ERASE edit|(),zeiger_c|(),zeiger_z|()
RETURN
> PROCEDURE zÄhl_box(x%,y|,u$,g_x%,g_y|,mi%,ma%,step%,VAR wert%)
LOCAL zahl_l|,u_breite%,b_breite%,b_hÖhe%,box_mitte&,hintergrund$
LOCAL xl1%,xl2%,xr1%,xr2%,yl1|,yl2|,yr1|,yr2|,zahl_y|,abbruch!,ende!
'
zahl_l|=LEN(STR$(ma%))*8+10
u_breite%=LEN(u$)*8
b_breite%=MAX(u_breite%+10,120,zahl_l|+90)
b_hÖhe%=(12+10)+g_y|+15+(12+20)
box_mitte&=x%+b_breite%/2
'
COLOR 0
GET x%,y|,x%+b_breite%+6,y|+b_hÖhe%+4,hintergrund$
PBOX x%,y|,x%+b_breite%+6,y|+b_hÖhe%+4
COLOR 1
'
COLOR 1
BOX x%,y|,x%+b_breite%+6,y|+b_hÖhe%+4
BOX x%+3,y|+2,x%+b_breite%+3,y|+b_hÖhe%+2
ADD x%,3
ADD y|,2
'
BOX box_mitte&-(LEN(u$)*8)/2-2,y|+5,x%+b_breite%/2+(LEN(u$)*8)/2+2,y|+17
TEXT box_mitte&-(LEN(u$)*8)/2,y|+14,u$
'
IF g_x%>0
PUT box_mitte&-g_x%/2,y|+22,grafik$
ENDIF
'
xl1%=x%+10
xl2%=x%+73
yl1|=y|+b_hÖhe%-18
yl2|=y|+b_hÖhe%-6
xr1%=x%+b_breite%-36
xr2%=x%+b_breite%-10
yr1|=y|+b_hÖhe%-18
yr2|=y|+b_hÖhe%-6
'
BOX xl1%,yl1|,xl2%,yl2|
BOX xr1%,yr1|,xr2%,yr2|
TEXT xl1%+4,yl2|-3,"Abbruch"
TEXT xr1%+4,yl2|-3,"OK"
'
zahl_y|=y|+22+g_y|+10
BOX box_mitte&-zahl_l|/2,zahl_y|,box_mitte&+zahl_l|/2,zahl_y|+12
'
ini_x&=box_mitte&+zahl_l|/2+10
ina_x&=ini_x&+25
count_o|=zahl_y|
count_u|=count_o|+12
TEXT ini_x&+3,count_u|-3,"+"
LINE ini_x&,count_o|,ini_x&,count_u|
DRAW TO ina_x&,count_o|+6
DRAW TO ini_x&,count_o|
'
dei_x&=box_mitte&-zahl_l|/2-10
dea_x&=dei_x&-25
TEXT dei_x&-9,count_u|-3,"-"
LINE dei_x&,count_o|,dei_x&,count_u|
DRAW TO dea_x&,count_o|+6
DRAW TO dei_x&,count_o|
'
ADD zahl_y|,9
zahl_l|=LEN(STR$(wert%))*8
TEXT box_mitte&-zahl_l|/2,zahl_y|,wert%
'
REPEAT
IF MOUSEK=1
IF MOUSEY>yl1| AND MOUSEY<yl2|
IF MOUSEX>xl1% AND MOUSEX<xl2%
abbruch!=TRUE
ende!=TRUE !Abbruch
ELSE IF MOUSEX>xr1% AND MOUSEX<xr2%
ende!=TRUE !OK
ENDIF
ELSE IF MOUSEY>count_o| AND MOUSEY<count_u| AND NOT bremse!
IF MOUSEX>ini_x& AND MOUSEX<ina_x& AND wert%<=ma%-step%
ADD wert%,step%
bremse!=1
verÄnderung!=TRUE
ELSE IF MOUSEX>dea_x& AND MOUSEX<dei_x& AND wert%>=mi%+step%
SUB wert%,step%
bremse!=1
verÄnderung!=TRUE
ENDIF
ENDIF
ELSE IF MOUSEK=0
bremse!=0
ENDIF
'
IF verÄnderung!
verÄnderung!=FALSE
COLOR 0
PBOX SUCC(box_mitte&-zahl_l|/2),zahl_y|-8,PRED(box_mitte&+zahl_l|/2),zahl_y|+2
COLOR 1
zahl_l|=LEN(STR$(wert%))*8
TEXT box_mitte&-zahl_l|/2,zahl_y|,wert%
ENDIF
UNTIL ende!=TRUE
RETURN
> PROCEDURE e_box
REPEAT
taste$=INKEY$
IF MOUSEX>xl1% AND MOUSEX<xl2% AND MOUSEY>yl1| AND MOUSEY<yl2| AND MOUSEK=1
abbruch!=TRUE
ende!=TRUE
ELSE IF MOUSEX>xr1% AND MOUSEX<xr2% AND MOUSEY>yr1| AND MOUSEY<yr2| AND MOUSEK=1
ende!=TRUE
ELSE IF taste$<>""
IF LEN(taste$)=1
taste|=ASC(taste$)
ELSE IF LEN(taste$)=2
taste|=ASC(RIGHT$(taste$))
SUB taste|,64
ELSE IF LEN(taste$)>2
taste|=0
ENDIF
SELECT taste|
CASE 1 !Cursor up
IF zeile|>1
PUT e_x%+PRED(spalte|)*9,(e_y|-7)+PRED(zeile|)*12,cursor$,80
DEC zeile|
IF zeiger_z|(zeile|)<zeichen&
spalte|=MIN(SUCC(zeiger_z|(zeile|)),spalte|)
zeiger_c|(zeile|)=PRED(spalte|)
ELSE
eintrag_neu
ENDIF
PUT e_x%+PRED(spalte|)*9,(e_y|-7)+PRED(zeile|)*12,cursor$,80
ENDIF
CASE 2 !Cursor down
IF zeile|<n|
PUT e_x%+PRED(spalte|)*9,(e_y|-7)+PRED(zeile|)*12,cursor$,80
INC zeile|
IF zeiger_z|(zeile|)<zeichen&
spalte|=MIN(SUCC(zeiger_z|(zeile|)),spalte|)
zeiger_c|(zeile|)=PRED(spalte|)
ELSE
eintrag_neu
ENDIF
PUT e_x%+PRED(spalte|)*9,(e_y|-7)+PRED(zeile|)*12,cursor$,80
ENDIF
CASE 3 !Cursor right
IF zeiger_c|(zeile|)<zeiger_z|(zeile|)
IF spalte|<zeichen& AND spalte|<=zeiger_z|(zeile|)
' Cursor vor Text und Feldende
PUT e_x%+PRED(spalte|)*9,(e_y|-7)+PRED(zeile|)*12,cursor$,80
INC spalte|
INC zeiger_c|(zeile|)
PUT e_x%+PRED(spalte|)*9,(e_y|-7)+PRED(zeile|)*12,cursor$,80
ELSE IF spalte|=zeichen& AND zeiger_c|(zeile|)<zeiger_z|(zeile|)
' Cursor am Feldende und vor Textende
shift(2,PRED(zeichen&),1,edit|(zeile|,zeiger_c|(zeile|)),PRED(zeichen&))
DEC rechts|
INC zeiger_c|(zeile|)
ENDIF
ENDIF
CASE 4 !Cursor left
IF spalte|>1
PUT e_x%+PRED(spalte|)*9,(e_y|-7)+PRED(zeile|)*12,cursor$,80
DEC spalte|
DEC zeiger_c|(zeile|)
PUT e_x%+PRED(spalte|)*9,(e_y|-7)+PRED(zeile|)*12,cursor$,80
ELSE IF spalte|=1 AND zeiger_c|(zeile|)>0
PUT e_x%+PRED(spalte|)*9,(e_y|-7)+PRED(zeile|)*12,cursor$,80
shift(1,zeichen&-2,2,edit|(zeile|,PRED(zeiger_c|(zeile|))),1)
DEC zeiger_c|(zeile|)
PUT e_x%+PRED(spalte|)*9,(e_y|-7)+PRED(zeile|)*12,cursor$,80
IF zeiger_z|(zeile|)-zeiger_c|(zeile|)>=zeichen&
INC rechts|
ENDIF
ENDIF
CASE 13
IF zeile|=n|
ende!=TRUE
ELSE
PUT e_x%+PRED(spalte|)*9,(e_y|-7)+PRED(zeile|)*12,cursor$,80
INC zeile|
IF zeiger_z|(zeile|)<zeichen&
spalte|=1
zeiger_c|(zeile|)=0
ELSE
eintrag_neu
ENDIF
PUT e_x%+PRED(spalte|)*9,(e_y|-7)+PRED(zeile|)*12,cursor$,80
ENDIF
CASE 8 !Backspace
IF spalte|>1 AND spalte|<zeichen&
PUT e_x%+PRED(spalte|)*9,(e_y|-7)+PRED(zeile|)*12,cursor$,80
IF rechts|
char|=edit|(zeile|,zeiger_z|(zeile|)-rechts|)
DEC rechts|
ELSE
char|=32
ENDIF
position|=PRED(zeichen&)
shift(spalte|,PRED(zeichen&),PRED(spalte|),char|,position|)
@entf(zeile|,PRED(zeiger_c|(zeile|)),zeiger_z|(zeile|),edit|())
DEC zeiger_c|(zeile|)
DEC zeiger_z|(zeile|)
DEC spalte|
PUT e_x%+PRED(spalte|)*9,(e_y|-7)+PRED(zeile|)*12,cursor$,80
ENDIF
CASE 127 !Delete
IF spalte|<zeichen& AND zeiger_z|(zeile|)>zeiger_c|(zeile|)
PUT e_x%+PRED(spalte|)*9,(e_y|-7)+PRED(zeile|)*12,cursor$,80
IF rechts|
char|=edit|(zeile|,zeiger_z|(zeile|)-rechts|)
DEC rechts|
ELSE
char|=32
ENDIF
position|=PRED(zeichen&)
shift(SUCC(spalte|),zeichen&-1,spalte|,char|,position|)
@entf(zeile|,zeiger_c|(zeile|),zeiger_z|(zeile|),edit|())
DEC zeiger_z|(zeile|)
PUT e_x%+PRED(spalte|)*9,(e_y|-7)+PRED(zeile|)*12,cursor$,80
ENDIF
'
CASE 32 TO 126,196 TO 252
IF zeiger_z|(zeile|)<100
IF zeiger_c|(zeile|)=zeiger_z|(zeile|) AND spalte|=zeichen&
' Cursor am Textende und am Feldende
shift(2,PRED(zeichen&),1,taste|,PRED(zeichen&))
edit|(zeile|,zeiger_z|(zeile|))=taste|
ELSE IF zeiger_c|(zeile|)=zeiger_z|(zeile|) AND spalte|<zeichen&
' Cursor am Textende und vor Feldende
PUT e_x%+PRED(spalte|)*9,(e_y|-7)+PRED(zeile|)*12,cursor$,80
TEXT e_x%+PRED(spalte|)*9,(e_y|)+PRED(zeile|)*12,CHR$(taste|)
INC spalte|
PUT e_x%+PRED(spalte|)*9,(e_y|-7)+PRED(zeile|)*12,cursor$,80
edit|(zeile|,zeiger_z|(zeile|))=taste|
ELSE IF zeiger_c|(zeile|)<zeiger_z|(zeile|) AND spalte|=PRED(zeichen&)
' Cursor im Text und am Feldende
PUT e_x%+PRED(spalte|)*9,(e_y|-7)+PRED(zeile|)*12,cursor$,80
shift(2,PRED(spalte|),1,taste|,PRED(spalte|))
@einf(zeile|,zeiger_c|(zeile|),zeiger_z|(zeile|),taste|,edit|())
PUT e_x%+PRED(spalte|)*9,(e_y|-7)+PRED(zeile|)*12,cursor$,80
ELSE IF zeiger_c|(zeile|)<zeiger_z|(zeile|) AND spalte|<zeichen&
' Cursor im Text und vor Feldende
PUT e_x%+PRED(spalte|)*9,(e_y|-7)+PRED(zeile|)*12,cursor$,80
shift(spalte|,zeichen&-2,SUCC(spalte|),taste|,spalte|)
INC spalte|
PUT e_x%+PRED(spalte|)*9,(e_y|-7)+PRED(zeile|)*12,cursor$,80
@einf(zeile|,zeiger_c|(zeile|),zeiger_z|(zeile|),taste|,edit|())
IF zeiger_z|(zeile|)-zeiger_c|(zeile|)+spalte|>zeichen&
INC rechts|
ENDIF
ENDIF
INC zeiger_c|(zeile|)
INC zeiger_z|(zeile|)
ENDIF
ENDSELECT
ENDIF
UNTIL ende!=TRUE
RETURN
> PROCEDURE eintrag_neu
spalte|=1
zeiger_c|(zeile|)=0
DEFFILL 0
PBOX e_x%,e_y|-8+PRED(zeile|)*12,e_x%+9*zeichen&,e_y|+2+PRED(zeile|)*12
DEFFILL 1
SUB zeichen&,2
FOR i|=0 TO zeichen&
TEXT e_x%+i|*9,e_y|+PRED(zeile|)*12,CHR$(edit|(zeile|,i|))
NEXT i|
ADD zeichen&,2
rechts|=zeiger_z|(zeile|)-PRED(zeichen&)
RETURN
> PROCEDURE shift(erster|,letzter|,neu|,char|,position|)
GET e_x%+PRED(erster|)*9,e_y|-7+PRED(zeile|)*12,e_x%-1+letzter|*9,e_y|+1+PRED(zeile|)*12,rettung$
PUT e_x%+PRED(neu|)*9,e_y|-7+PRED(zeile|)*12,rettung$
TEXT e_x%+PRED(position|)*9,e_y|+PRED(zeile|)*12,CHR$(char|)
RETURN
> PROCEDURE entf(z|,s|,bis|,VAR a|())
REPEAT
a|(z|,s|)=a|(z|,SUCC(s|))
INC s|
UNTIL s|=>bis|
a|(z|,bis|)=0
RETURN
> PROCEDURE einf(z|,s|,bis|,wert_n|,VAR a|())
REPEAT
wert_a|=a|(z|,s|)
a|(z|,s|)=wert_n|
wert_n|=wert_a|
INC s|
UNTIL s|>bis|
RETURN